#ifndef _AIP8563_API_H_
#define _AIP8563_API_H_

#include "aip8563_board.h"

#if _REAL_TIME_CLOCK_SOURCE_ == _EXTERNAL_CLOCK_SOURCE_

// aip8563 iic 操作地址
#define AIP8563_IIC_OPERATION_ADDR                  0xA2

/**
 * @brief 寄存器列表
 * 
 */
typedef enum
{
  AIP8563_CONTORL_BIT_1    = 0x00, // 控制/状态寄存器1
  AIP8563_CONTORL_BIT_2    = 0x01, // 控制/状态寄存器2
  AIP8563_REAL_TIME_SECOND = 0x02, // 实时时钟-秒
  AIP8563_REAL_TIME_MINUTE = 0x03, // 实时时钟-分
  AIP8563_REAL_TIME_HOUR   = 0x04, // 实时时钟-时
  AIP8563_REAL_TIME_DAY    = 0x05, // 实时时钟-日
  AIP8563_REAL_TIME_WEEK   = 0x06, // 实时时钟-星期
  AIP8563_REAL_TIME_MONTH  = 0x07, // 实时时钟-月
  AIP8563_REAL_TIME_YEAR   = 0x08, // 实时时钟-年
  AIP8563_MINUTE_ALARM     = 0x09, // 分警报
  AIP8563_HOUR_ALARM       = 0x0A, // 时警报
  AIP8563_DATE_ALARM       = 0x0B, // 日钟警报
  AIP8563_WEEK_ALARM       = 0x0C, // 周钟警报
  AIP8563_CLK_OUT_SET      = 0x0D, // 时钟输出
} Aip8563Register_t;

/**
 * @brief BCD码转换成16进制
 *
 * @param Bcd      - 待转换的BCD码
 * @return uint8_t - 转换后的16进制
 */
extern uint8_t BcdToHex(uint8_t Bcd);

/**
 * @brief 16进制转BCD码
 *
 * @param Hex      - 待转换的16进制
 * @return uint8_t - 转换后的BCD码
 */
extern uint8_t HexToBcd(uint8_t Hex);

/**
 * @brief 写寄存器
 *
 * @param Register - 待操作的寄存器
 * @param Data     - 写入数据
 */
extern void Aip8563WriteRegister(uint8_t Register, uint8_t Data);

/**
 * @brief 读寄存器
 *
 * @param Register - 待读取的寄存器
 */
extern uint8_t Aip8563ReadRegister(uint8_t Register);

#endif
#endif
